package basic

// top-level functions
// function definition
fun hello(): Unit {
    println("hello world")
}

// extended function
fun Int.max(a: Int, b: Int): Int {
    return if (a > b) {
        a
    } else {
        b
    }
}

// top-level field
val sumLambda: (Int, Int) -> Int = { x, y -> x + y }

//可变变量定义：var 关键字

//不可变变量定义：val 关键字，只能赋值一次的变量(类似Java中final修饰的变量)


fun vars(vararg v: Int) {
    for (vt in v) {
        print(vt)
    }
}

var a = 1

// 模板中的简单名称：
val s1 = "a is $a"

// 模板中的任意表达式：
val s2 = "${s1.replace("is", "was")}, but now is $a"


//类型后面加?表示可为空
var age: String? = "23"

//抛出空指针异常
val ages = age!!.toInt()

//不做处理返回 null
val ages1 = age?.toInt()

//age为空返回-1
val ages2 = age?.toInt() ?: -1


//我们可以使用 is 运算符检测一个表达式是否某类型的一个实例(类似于Java中的instanceof关键字)。

//区间表达式由具有操作符形式 .. 的 rangeTo 函数辅以 in 和 !in 形成。

//IF 表达式
//When 表达式

//For 循环
//while 与 do...while 循环


// extended func
class User(var name: String)

/**扩展函数**/
fun User.Print() {
    print("用户名 $name")
}


// 位运算  infix 函数


///** Performs a bitwise AND operation between the two values. */
//public infix fun and(other: Int): Int
///** Performs a bitwise OR operation between the two values. */
//public infix fun or(other: Int): Int
///** Performs a bitwise XOR operation between the two values. */
//public infix fun xor(other: Int): Int

var xxxx = true && false


// 类型 exchange

fun hello1(): Unit {
    var b: Int = 1
    b++
    var a1 = true
    var a2 = false
    if (a1 && a2) {
        return
    }
    val i: Int = b.toInt()
}





